package savet.gui.tabelas;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import savet.entidades.atributos.Atributo;

public class AtributoCellRenderer extends DefaultTableCellRenderer {

    private static final Color COR_NAO_NOTIFICADO =  new Color(236, 236, 236);
    private static final Color COR_NAO_OBRIGATORIO = new Color(110, 110, 110);
    /** Cor que indica que o atributo nao tem a necessidade de ser visualizado. */
    private static final Color COR_DESABILITADO = new Color(236, 236, 236);
    private static final Color COR_NOTIFICADO = new Color(100, 100, 255);
    private static final Color COR_ATUACAO = Color.red;
    private static final Color COR_ORIENTACAO = Color.yellow;
    private static final Color COR_ATUACAO_ORIENTACAO = COR_ATUACAO;
    private Color currentColor = COR_DESABILITADO;

    public AtributoCellRenderer() {
        setOpaque(true); //MUST do this for background to show up.
    }

    @Override
    public Component getTableCellRendererComponent(
            JTable table, Object atributo,
            boolean isSelected, boolean hasFocus,
            int row, int column) {
        final Atributo att = (Atributo) atributo;
        currentColor = getColor(att);

        if (isSelected && att.getEstado() == Atributo.NAO_NOTIFICADO) {
            this.setBackground(new Color(183, 217, 241));
        } else {
            this.setBackground(currentColor);
        }
        return this;
    }



    public static Color getColor(AtributoCellEditor defaultEditor) {
        Atributo atributo = (Atributo) defaultEditor.getCellEditorValue();
        return getColor(atributo);
    }

    public static Color getColor(Atributo atributo) {
        switch (atributo.getEstado()) {
            case Atributo.NOTIFICADO:
                return COR_NOTIFICADO;

            case Atributo.NAO_SE_APLICA:
                return COR_DESABILITADO;

            case Atributo.COM_AUTUACAO:
                return COR_ATUACAO;

            case Atributo.COM_ORIENTACAO:
                return COR_ORIENTACAO;

            case Atributo.COM_AUTUACAO_ORIENTACAO:
                return COR_ATUACAO_ORIENTACAO;

            case Atributo.NAO_NOTIFICADO:
                return COR_NAO_NOTIFICADO;

            case Atributo.NAO_OBRIGATORIO:
                return COR_NAO_OBRIGATORIO;

            default:
                return COR_DESABILITADO;
        }
    }
}
